package exercises;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-07-09
 * Time: 19:14
 */

/**
 * 链表的中间结点
 * 已解答
 * 简单
 * 相关标签
 * 相关企业
 * 给你单链表的头结点 head ，请你找出并返回链表的中间结点。
 *
 * 如果有两个中间结点，则返回第二个中间结点。
 *
 *
 *
 * 示例 1：
 *
 *
 * 输入：head = [1,2,3,4,5]
 * 输出：[3,4,5]
 * 解释：链表只有一个中间结点，值为 3 。
 * 示例 2：
 *
 *
 * 输入：head = [1,2,3,4,5,6]
 * 输出：[4,5,6]
 * 解释：该链表有两个中间结点，值分别为 3 和 4 ，返回第二个结点
 */
public class Exercises2 {

    static class ListNode{
        public int val;
        public ListNode next;
    }

    public ListNode middleNode(ListNode head) {
        if(head == null) {
            return null;
        }

        ListNode fast = head;//快指针一次走2步
        ListNode slow = head;//慢指针一次走一步
//条件不可以交换：(fast != null && slow.next != null)，fast可能开始就为null
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }

        return slow;
    }
}
